import java.io.*;
import java.util.Arrays;

/**
 * 编写程序，从不同的编码文件中正确的读取字符串
 * 已知的字符编码文件有：gbk.txt,utf8.txt,utf16.txt,utf32.txt
 */
public class Q4 {

    /**
     * 根据字符编码输出文件文本
     *
     * @param fn      文件路径
     * @param charset 字符集名称
     */
    public static String printText(String fn, String charset) {
        argumentChecker(fn);

        String line;
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream(fn), charset))) {
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sb.toString();
    }

    /**
     * 参数校验器。要求 fn 存在且为文件
     *
     * @param fn 文件路径
     */
    private static void argumentChecker(String... fn) {
        Arrays.stream(fn).forEach(o -> {
            File file = new File(o);
            if (!file.exists() || !file.isFile()) {
                throw new IllegalArgumentException("fn: " + o);
            }
        });
    }

}
